package com.xxxtea.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.xxxtea.config.converter.ListTypeHandler;
import com.xxxtea.mpe.handler.AttachmentHandler;
import com.xxxtea.mpe.model.Attachment;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 聊天会话实体类
 * 
 * 用于存储聊天会话的基本信息，包括：
 * - 会话基本信息（名称、头像等）
 * - 会话参与者管理
 * - 会话消息管理
 * - 未读消息统计
 * 
 * 使用MyBatis-Plus注解进行数据库映射
 * 使用Swagger注解进行API文档生成
 * 
 * @author badman
 * @since 1.0.0
 */
@Data
@ApiModel("聊天会话")
@TableName(autoResultMap = true)
public class ChatSession {

	/**
	 * 主键ID
	 * 使用自增策略
	 */
	@ApiModelProperty("主键")
	@TableId(value = "id", type = IdType.AUTO)
	private Integer id;

	/**
	 * 会话拥有者ID
	 * 会话的创建者或管理员
	 */
	@ApiModelProperty("会话拥有者ID")
	private Integer ownerId;

	/**
	 * 会话名称
	 * 会话的显示名称
	 */
	@ApiModelProperty("会话名称")
	private String name;

	/**
	 * 会话头像
	 * 使用自定义处理器处理头像附件
	 */
	@ApiModelProperty("会话头像")
	@TableField(typeHandler = AttachmentHandler.class)
	private Attachment avatar;

	/**
	 * 用户ID集合
	 * 参与会话的用户ID列表
	 * 使用自定义处理器处理列表类型
	 */
	@ApiModelProperty("用户ID集合")
	@TableField(typeHandler = ListTypeHandler.class)
	private List<Integer> userIds;

	/**
	 * 会话消息ID集合
	 * 会话中的消息ID列表
	 * 使用自定义处理器处理列表类型
	 */
	@ApiModelProperty("会话消息ID集合")
	@TableField(typeHandler = ListTypeHandler.class)
	private List<Integer> messageIds;

	/**
	 * 创建时间
	 * 自动填充插入时间
	 */
	@ApiModelProperty("创建时间")
	@TableField(fill = FieldFill.INSERT)
	private Date createTime;

	/**
	 * 更新时间
	 * 自动填充插入和更新时间
	 */
	@ApiModelProperty("更新时间")
	@TableField(fill = FieldFill.INSERT_UPDATE)
	private Date updateTime;

	/**
	 * 消息记录列表
	 * 非数据库字段，用于关联查询会话消息
	 */
	@ApiModelProperty("消息记录")
	@TableField(exist = false)
	private List<ChatMessage> messageList;

	/**
	 * 未读信息条数
	 * 非数据库字段，用于统计未读消息数量
	 */
	@ApiModelProperty("未读信息条数")
	@TableField(exist = false)
	private long unreadCount;
}
